1 : <?php
2 : /*--------------------------------------------------------------------------+
3 : This file is part of eStudy.
4 : planspiel/classes/class.planspiellist.inc.php
5 : - Modulgruppe: Planspiel
6 : - Beschreibung: Auflisten der Planspiele eines Kurses.
7 : - Version: 0.7, 02/03/07
8 : - Autor(en): Clemens Weiß <clemens.weiss@mni.fh-giessen.de>
9 : +---------------------------------------------------------------------------+
10 : This program is free software; you can redistribute it and/or
11 : modify it under the terms of the GNU General Public License
12 : as published by the Free Software Foundation; either version 2
13 : of the License, or any later version.
14 : +---------------------------------------------------------------------------+
15 : This program is distributed in the hope that it will be useful,
16 : but WITHOUT ANY WARRANTY; without even the implied warranty of
17 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 : GNU General Public License for more details.
19 : You should have received a copy of the GNU General Public License
20 : along with this program; if not, write to the Free Software
21 : Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 : +--------------------------------------------------------------------------*/
23 : /**
24 : * Auflisten der Planspiele eines Kurses.
25 : * @package eStudy.Planspiel
26 : * @version 0.7, 02/03/07
27 : * @author Clemens Weiß <clemens.weiss@mni.fh-giessen.de>
28 : */
29 1 : require_once ("class.planspiel.inc.php");
30 1 : require_once ("class.phase.inc.php");
31 1 : require_once ("class.color_indicator.inc.php");
32 1 : define("PLANSPIEL_ALL_COURSES", -1);
33 1 : class PlanspielList {
34 : /**
35 : * Listet die Planspiele des übergebenen Kurses auf.
36 : *
37 : * @static
38 : * @access public
39 : * @param int $courseID ID des Kurses
40 : * @return false bei fehlerhafter Kurs-ID, sonst true
41 : */
42 : function listPlanspiel($courseID) {
43 0 : global $db, $settings;
44 0 : $dbp = $settings["dbPrefix"];
45 0 : if (strval(intval($courseID)) != $courseID || $courseID <= 0) {
46 0 : return false;
47 : }
48 0 : $planspiele = PlanspielList::getPlanspiel($courseID);
49 0 : if (!empty($planspiele)) {
50 0 : $planspielRoles = PlanspielList::getPlanspielRoleIDs($courseID);
51 0 : echo "<table class='contentTable'>\n";
52 0 : Output::echoTableHead("Planspiele", 7);
53 0 : echo "<tr><th>Map</th><th>Name</th><th>Spielleiter(in)</th><th>Abgeschlossen</th><th>Aufwand</th><th>Budget</th><th></th></tr>";
54 0 : foreach($planspiele as $planspiel) {
55 0 : $ID = $planspiel->getID();
56 0 : echo "<tr valign='top'>";
57 0 : echo "<td>".($planspiel->getMapID() ? $planspiel->getMapThumbnail() : "Keine Map vorhanden.") ."<br /> </td>";
58 0 : echo "<td><b>".$planspiel->getLink(false)."</b><br />";
59 :
60 : //Deadline
61 0 : $deadline = $db->get_var("SELECT deadline FROM {$dbp}planspiel WHERE ID='$ID'");
62 0 : if($deadline == NULL){
63 0 : echo "DL: n.d.<br />";
64 0 : } else {
65 0 : $timestamp = $db->get_var("SELECT deadline FROM {$dbp}planspiel WHERE ID='$ID'");
66 0 : echo "DL: ".date("d.m.Y, H:i",$timestamp)." Uhr<br />";
67 : }
68 :
69 0 : $document_count = $db->get_var("SELECT count(planspiel_document.id) FROM planspiel
70 : JOIN planspiel_phase on (planspiel.id = planspiel_phase.planspiel_id)
71 : JOIN planspiel_document on (planspiel_phase.id = planspiel_document.phase_id)
72 0 : WHERE planspiel.id = '".$planspiel->getID()."'");
73 0 : $document_finished = $db->get_var("SELECT count(planspiel_document.id) FROM planspiel
74 : JOIN planspiel_phase on (planspiel.id = planspiel_phase.planspiel_id)
75 : JOIN planspiel_document on (planspiel_phase.id = planspiel_document.phase_id)
76 0 : WHERE planspiel.id = '".$planspiel->getID()."'
77 0 : AND accepted <>0");
78 0 : $milestone_count = $db->get_var("SELECT count(planspiel_phase.id) FROM planspiel
79 : JOIN planspiel_phase on (planspiel.id = planspiel_phase.planspiel_id)
80 0 : WHERE planspiel.id = '".$planspiel->getID()."'
81 0 : AND is_milestone=1");
82 0 : $milestone_finished = $db->get_var("SELECT count(planspiel_phase.id) FROM planspiel
83 : JOIN planspiel_phase on (planspiel.id = planspiel_phase.planspiel_id)
84 0 : WHERE planspiel.id = '".$planspiel->getID()."'
85 : AND is_milestone=1
86 0 : AND planspiel_phase.finished=1");
87 0 : if ($document_count == 0){
88 0 : echo "Fortschritt: 0% <br />";
89 0 : } else {
90 0 : echo "Fortschritt: ".number_format($document_finished*100/$document_count, 0)."% <br />";
91 : }
92 : // Link zu den Project Details
93 0 : echo "<a href='projectdetails.php?ID=".$planspiel->getID() ."&tab=1' title='Details anzeigen'"."><img alt='Statistik anzeigen' src='".PATH_TO_ROOT."images/icon_planspiel_statistics.gif'/> Details</a>";
94 0 : echo "</td><td>".$planspiel->getLeader() ."</td>";
95 0 : $phase_count = $planspiel->getPhasesCount();
96 0 : $phase_finished = $planspiel->getFinishedPhasesCount();
97 :
98 : //Variablen für die Ausgabe der Dokumente und Meilensteine
99 0 : echo "<td><a href='".PATH_TO_ROOT.SCRIPT_NAME."?action=showPhases&ID=".$planspiel->getID() ."' title='Phasen anzeigen'>$phase_finished/$phase_count Phase".($phase_count == 1 ? "" : "n") ."</a><br />";
100 0 : echo $document_finished."/".$document_count." Dokument".($document_count == 1 ? "" : "e") ."<br />";
101 0 : echo $milestone_finished."/".$milestone_count." Meilenstein".($milestone_count == 1 ? "" : "e") ."";
102 :
103 0 : echo "</td><td>";
104 0 : echo "A: ".$planspiel->getEstimatedEffort() ."<br />";
105 0 : echo "B: ".$planspiel->getDaysSpent() ."<br />";
106 0 : echo "C: ".$planspiel->getETC();
107 0 : echo "</td>";
108 :
109 : //Budget Balken
110 0 : if ($planspiel->getEstimatedEffort() == "0"){
111 0 : $colors = new ColorIndicator("100", "0");
112 0 : } else {
113 0 : $colors = new ColorIndicator("100", ((($planspiel->getDaysSpent())+($planspiel->getETC()))*100/($planspiel->getEstimatedEffort())));
114 : }
115 0 : $colors->is_budget();
116 : ?> <td> <table border="1" cellpadding="0" style="height: 35px; border-collapse: collapse; border-color: #000000; width: 10px;" >
117 : <tr>
118 0 : <td title="<?php echo $colors->tooltip; ?>" style=" background-color:<?php echo $colors->budget_color; ?>;"> </td>
119 : </tr>
120 : </table></td>
121 0 : <?php
122 :
123 0 : if ($_SESSION["usergroup"] == ADMIN || ($_SESSION["usergroup"] == DOZENT && $courseID > 0) || (isset($_SESSION["roleID"]) && $_SESSION["roleID"] == $planspielRoles["leader"] && $_SESSION["userid"] == $planspiel->getLeaderID())) {
124 0 : echo "<td><a href='".PATH_TO_ROOT.SCRIPT_NAME."?action=editPlanspiel&ID=".$planspiel->getID() ."'>".Output::getIcon("icon_edit", "Bearbeiten") ."</a><a href='".PATH_TO_ROOT.SCRIPT_NAME."?action=deletePlanspiel&ID=".$planspiel->getID() ."'>".Output::getIcon("icon_muell", "Löschen") ."</a></td>";
125 0 : } else {
126 0 : echo "<td></td>";
127 : }
128 0 : echo "</tr>\n";
129 0 : }
130 0 : echo "</table>\n";
131 :
132 0 : echo "<p>A: Geschätzter Aufwand<br />B: Aufgewendete Zeit<br />C: Geschätzte Zeit bis zum Abschluss<br />(alle Angaben in Personentagen)<br />DL: Deadline<br />n.d.: nicht definiert</p>";
133 :
134 0 : } else {
135 0 : echo "<p>Es wurden noch keine Planspiele angelegt.</p>";
136 : }
137 0 : return true;
138 : }
139 : /**
140 : * Gibt die Planspiele des übergebenen Kurses zurück.
141 : *
142 : * @static
143 : * @access public
144 : * @param int $courseID ID des Kurses
145 : * @return array Array mit Planspiel-Objekten
146 : */
147 : function getPlanspiel($courseID) {
148 0 : global $db, $settings, $EZSQL_ERROR;
149 0 : $dbp = $settings["dbPrefix"];
150 0 : if (strval(intval($courseID)) != $courseID || $courseID < PLANSPIEL_ALL_COURSES) {
151 0 : return false;
152 : }
153 0 : $where = "";
154 0 : if ($courseID > PLANSPIEL_ALL_COURSES) {
155 0 : $where = "WHERE course_id='$courseID'";
156 0 : }
157 0 : $IDs = $db->get_col("SELECT id FROM {$dbp}planspiel $where ORDER BY name");
158 0 : $planspiele = array();
159 0 : if ($db->num_rows) foreach($IDs as $ID) {
160 0 : $planspiele[] = new Planspiel($ID);
161 0 : }
162 0 : return $planspiele;
163 : }
164 : /**
165 : * Gibt die Anzahl der Planspiele in einem Kurs zurück.
166 : *
167 : * @static
168 : * @access public
169 : * @param int $courseID ID des Kurses
170 : * @return int Anzahl der Planspiele im Kurs
171 : */
172 : function countPlanspiel($courseID) {
173 0 : global $db, $settings, $EZSQL_ERROR;
174 0 : $dbp = $settings["dbPrefix"];
175 0 : if (strval(intval($courseID)) != $courseID || $courseID < PLANSPIEL_ALL_COURSES) {
176 0 : return false;
177 : }
178 0 : $where = "";
179 0 : if ($courseID > PLANSPIEL_ALL_COURSES) {
180 0 : $where = "WHERE course_id='$courseID'";
181 0 : }
182 0 : $count = $db->get_var("SELECT COUNT(*) FROM {$dbp}planspiel $where");
183 0 : return intval($count);
184 : }
185 : /**
186 : * Gibt die IDs der Planspiel-Rollen des Kurses zurück.
187 : *
188 : * @static
189 : * @access public
190 : * @param int $courseID ID des Kurses
191 : * @return mixed array mit den IDs oder false bei Fehler
192 : */
193 : function getPlanspielRoleIDs($courseID) {
194 0 : global $db, $settings, $EZSQL_ERROR;
195 0 : $dbp = $settings["dbPrefix"];
196 0 : if (strval(intval($courseID)) != $courseID || $courseID < 0) {
197 0 : return false;
198 : }
199 0 : $IDs = $db->get_col("SELECT {$dbp}roles.id FROM {$dbp}roles JOIN {$dbp}rolesets ON set_id={$dbp}rolesets.id WHERE course_id='$courseID' AND {$dbp}rolesets.source_id=1 ORDER BY {$dbp}roles.source_id");
200 0 : if (!is_null($IDs)) {
201 0 : return array("leader" => intval($IDs[0]), "phaseResponsible" => intval($IDs[1]), "editor" => intval($IDs[2]), "reviewer" => intval($IDs[3]),);
202 : }
203 0 : return false;
204 : }
205 : /**
206 : * Gibt die Planspiele zurück, an denen der angegebene Benutzer beteiligt ist.
207 : *
208 : * @static
209 : * @access public
210 : * @param int $courseID ID des Kurses
211 : * @param int $userID ID des Benutzers
212 : * @param bool $includeFinished Gibt an, ob auch abgeschlossene Planspiele zurückgegeben werden sollen
213 : * @return array Array mit Planspiel-Objekten
214 : */
215 : function getPlanspielOfUser($courseID, $userID, $includeFinished = false) {
216 0 : global $db, $settings, $EZSQL_ERROR;
217 0 : $dbp = $settings["dbPrefix"];
218 0 : if (strval(intval($courseID)) != $courseID || $courseID < PLANSPIEL_ALL_COURSES || strval(intval($userID)) != $userID || $userID < 1) {
219 0 : return false;
220 : }
221 0 : $planspiele = array();
222 0 : foreach(PlanspielList::getPlanspiel($courseID) as $planspiel) {
223 0 : if (!$includeFinished && $planspiel->isFinished()) {
224 0 : continue;
225 : }
226 0 : if ($planspiel->getLeaderID() == $userID) {
227 0 : $planspiele[] = $planspiel;
228 0 : } else {
229 0 : $found1 = false;
230 0 : foreach($planspiel->getPhases() as $phase) {
231 0 : if ($phase->getResponsibleUserID() == $userID) {
232 0 : $planspiele[] = $planspiel;
233 0 : $found1 = true;
234 0 : break;
235 : } else {
236 0 : $found2 = false;
237 0 : foreach($phase->getDocuments() as $doc) {
238 0 : if ($doc->getEditorUserID() == $userID || $doc->getReviewerUserID() == $userID) {
239 0 : $planspiele[] = $planspiel;
240 0 : $found2 = true;
241 0 : break;
242 : }
243 0 : }
244 0 : if ($found2) {
245 0 : $found1 = true;
246 0 : break;
247 : }
248 : }
249 0 : }
250 0 : if ($found1) continue;
251 : }
252 0 : }
253 0 : return $planspiele;
254 : }
255 : function getPlanspielByRoleID($courseID, $userID, $roleID, $includeFinished = false) {
256 0 : $roles = PlanspielList::getPlanspielRoleIDs($courseID);
257 0 : switch (array_search($roleID, $roles)) {
258 0 : case "leader":
259 0 : return PlanspielList::getPlanspielWhereLeader($courseID, $userID, $includeFinished);
260 0 : case "phaseResponsible":
261 0 : return PlanspielList::getPlanspielWhereResponsible($courseID, $userID, $includeFinished);
262 0 : case "editor":
263 0 : return PlanspielList::getPlanspielWhereEditor($courseID, $userID, $includeFinished);
264 0 : case "reviewer":
265 0 : return PlanspielList::getPlanspielWhereReviewer($courseID, $userID, $includeFinished);
266 0 : default:
267 0 : return PlanspielList::getPlanspielOfUser($courseID, $userID, $includeFinished);
268 0 : }
269 : }
270 : /**
271 : * Gibt die Anzahl der Planspiele des Kurses zurück, in denen der Benutzer Spielleiter ist.
272 : *
273 : * @static
274 : * @access public
275 : * @param int $courseID ID des Kurses
276 : * @param int $userID ID des Benutzers
277 : * @return int Anzahl der Planspiele
278 : */
279 : function getPlanspielWhereLeader($courseID, $userID, $includeFinished = false) {
280 0 : global $db, $settings, $EZSQL_ERROR;
281 0 : $dbp = $settings["dbPrefix"];
282 0 : if (strval(intval($courseID)) != $courseID || $courseID < PLANSPIEL_ALL_COURSES || strval(intval($userID)) != $userID || $userID < 1) {
283 0 : return false;
284 : }
285 0 : $planspiele = array();
286 0 : foreach(PlanspielList::getPlanspiel($courseID) as $planspiel) {
287 0 : if ($planspiel->getLeaderID() == $userID) {
288 0 : $planspiele[] = $planspiel;
289 0 : }
290 0 : }
291 0 : return $planspiele;
292 : }
293 : /**
294 : * Gibt die Anzahl der Phasen des Kurses zurück, in denen der Benutzer Phasenverantwortlicher ist.
295 : *
296 : * @static
297 : * @access public
298 : * @param int $courseID ID des Kurses
299 : * @param int $userID ID des Benutzers
300 : * @return int Anzahl der Phasen
301 : */
302 : function getPlanspielWhereResponsible($courseID, $userID, $includeFinished = false) {
303 0 : global $db, $settings, $EZSQL_ERROR;
304 0 : $dbp = $settings["dbPrefix"];
305 0 : if (strval(intval($courseID)) != $courseID || $courseID < PLANSPIEL_ALL_COURSES || strval(intval($userID)) != $userID || $userID < 1) {
306 0 : return false;
307 : }
308 0 : $planspiele = array();
309 0 : foreach(PlanspielList::getPlanspiel($courseID) as $planspiel) {
310 0 : if (!$includeFinished && $planspiel->isFinished()) {
311 0 : continue;
312 : }
313 0 : foreach($planspiel->getPhases() as $phase) {
314 0 : if ($phase->getResponsibleUserID() == $userID) {
315 0 : $planspiele[] = $planspiel;
316 0 : }
317 0 : }
318 0 : }
319 0 : return $planspiele;
320 : }
321 : /**
322 : * Gibt die Anzahl der Dokumente des Kurses zurück, in denen der Benutzer Dokumentenbearbeiter ist.
323 : *
324 : * @static
325 : * @access public
326 : * @param int $courseID ID des Kurses
327 : * @param int $userID ID des Benutzers
328 : * @return int Anzahl der Dokumente
329 : */
330 : function getPlanspielWhereEditor($courseID, $userID, $includeFinished = false) {
331 0 : global $db, $settings, $EZSQL_ERROR;
332 0 : $dbp = $settings["dbPrefix"];
333 0 : if (strval(intval($courseID)) != $courseID || $courseID < PLANSPIEL_ALL_COURSES || strval(intval($userID)) != $userID || $userID < 1) {
334 0 : return false;
335 : }
336 0 : $planspiele = array();
337 0 : foreach(PlanspielList::getPlanspiel($courseID) as $planspiel) {
338 0 : if (!$includeFinished && $planspiel->isFinished()) {
339 0 : continue;
340 : }
341 0 : foreach($planspiel->getPhases() as $phase) {
342 0 : foreach($phase->getDocuments() as $doc) {
343 0 : if ($doc->getEditorUserID() == $userID) {
344 0 : $planspiele[] = $planspiel;
345 0 : }
346 0 : }
347 0 : }
348 0 : }
349 0 : return $planspiele;
350 : }
351 : /**
352 : * Gibt die Anzahl der Dokumente des Kurses zurück, in denen der Benutzer Dokumentenreviewer ist.
353 : *
354 : * @static
355 : * @access public
356 : * @param int $courseID ID des Kurses
357 : * @param int $userID ID des Benutzers
358 : * @return int Anzahl der Dokumente
359 : */
360 : function getPlanspielWhereReviewer($courseID, $userID, $includeFinished = false) {
361 0 : global $db, $settings, $EZSQL_ERROR;
362 0 : $dbp = $settings["dbPrefix"];
363 0 : if (strval(intval($courseID)) != $courseID || $courseID < PLANSPIEL_ALL_COURSES || strval(intval($userID)) != $userID || $userID < 1) {
364 0 : return false;
365 : }
366 0 : $planspiele = array();
367 0 : foreach(PlanspielList::getPlanspiel($courseID) as $planspiel) {
368 0 : if (!$includeFinished && $planspiel->isFinished()) {
369 0 : continue;
370 : }
371 0 : foreach($planspiel->getPhases() as $phase) {
372 0 : foreach($phase->getDocuments() as $doc) {
373 0 : if ($doc->getReviewerUserID() == $userID) {
374 0 : $planspiele[] = $planspiel;
375 0 : }
376 0 : }
377 0 : }
378 0 : }
379 0 : return $planspiele;
380 : }
381 : }
|